const Redis = require('ioredis');

// 创建Redis客户端实例
const redis = new Redis({
  host: '127.0.0.1',
  port: 6379,
  lazyConnect: true, // 懒连接
  retryStrategy: (times) => {
    // 重连策略
    const delay = Math.min(times * 50, 2000);
    return delay;
  }
});

// 连接事件处理
redis.on('connect', () => {
  console.log('Redis客户端已连接');
});

redis.on('error', (err) => {
  console.error('Redis连接错误:', err);
});

// 辅助函数

/**
 * 设置缓存，同时设置过期时间
 * @param {string} key - 缓存键
 * @param {any} value - 缓存值
 * @param {number} seconds - 过期时间（秒）
 */
async function set(key, value, seconds) {
  try {
    if (typeof value === 'object') {
      value = JSON.stringify(value);
    }
    if (seconds) {
      await redis.setex(key, seconds, value);
    } else {
      await redis.set(key, value);
    }
    return true;
  } catch (err) {
    console.error('Redis设置缓存错误:', err);
    return false;
  }
}

/**
 * 获取缓存
 * @param {string} key - 缓存键
 * @param {boolean} parse - 是否尝试解析JSON
 */
async function get(key, parse = true) {
  try {
    const value = await redis.get(key);
    if (value && parse) {
      try {
        return JSON.parse(value);
      } catch (e) {
        return value;
      }
    }
    return value;
  } catch (err) {
    console.error('Redis获取缓存错误:', err);
    return null;
  }
}

/**
 * 删除缓存
 * @param {string} key - 缓存键
 */
async function del(key) {
  try {
    await redis.del(key);
    return true;
  } catch (err) {
    console.error('Redis删除缓存错误:', err);
    return false;
  }
}

module.exports = {
  client: redis,
  set,
  get,
  del
}; 